package com.wx.leetcode;

/**
 * @desc: 给定一个包含 n + 1 个整数的数组 nums，其数字都在 1 到 n 之间（包括 1 和 n），可知至少存在一个重复的整数。假设只有一个重复的整数，找出这个重复的数。
 * 1.不能更改原数组（假设数组是只读的）。
 * 2.只能使用额外的 O(1) 的空间。
 * 3.时间复杂度小于 O(n2) 。
 * 4.数组中只有一个重复的数字，但它可能不止重复出现一次。
 * @author: wx
 * @time: 2020/4/21 1:25 PM
 */
public class FindDuplicateTopic {
    
    /**
     * 桶排序思路
     */
    public static int findDuplicate(int[] nums) {

        int maxLength = 0;

        for (int i = 0; i < nums.length; i++) {
            maxLength = Math.max(maxLength,nums[i]);
        }

        int[] temp = new int[maxLength+1];


        for (int i = 0; i < nums.length; i++) {
            if (++temp[nums[i]] > 1) {
                return nums[i];
            }
        }

        return 0;
    }


    public static void main(String args[]) {
        int[] nums = new int[]{1,3,4,2,2};
        System.out.println(findDuplicate(nums));
    }


}
